#pragma once

#include <iostream>
#include <vector>
#include <ctime>

typedef void (*task_t)();

void PrintLog() {
    std::cout << "我是一个打印日志的任务!" <<std::endl;
}

void Download() {
    std::cout << "我是一个下载文件的任务!" <<std::endl;
}

void Upload() {
    std::cout << "我是一个上传文件的任务!" <<std::endl;
}

class TaskManager {
public:
    TaskManager(){
        srand(time(nullptr)); //初始化随机种子
    }

    // 注册任务函数到管理器中
    void Register(task_t t) {
        _tasks.push_back(t);
    }

    // 随机生成一个任务码
    int Code() {
        if (_tasks.empty()) return -1; // 无任务时返回无效码
        int code = rand() % _tasks.size(); 
        return code;
    }

    // 执行指定的任务代码
    void Execute(int code) {
        if(code < 0 || code >= _tasks.size()) {
            std::cout << "Invalid task code" << std::endl;
            return;
        }
        _tasks[code]();
    }

    ~TaskManager(){}
private:
std::vector<task_t> _tasks; // 存储任务函数指针的容器
};